package cn.com.blueInfo.core.baseService.ddns;

import lombok.extern.log4j.Log4j2;

import java.util.TimerTask;

@Log4j2
public class UpdateDNS extends TimerTask {
//
//    public static final String attribute = "dnsRecords";
//
//    private final ServletContext servletContext;
//
//    private static final String regionId = "cn-hangzhou";
//    private static final String accessKeyId = System.getenv("ACCESS_KEY_ID");
//    private static final String secret = System.getenv("SECRET");
//
//    public UpdateDNS(ServletContext servletContext) {
//        this.servletContext = servletContext;
//    }
//
    @Override
    public void run() {
//        this.updateDNS();
    }
//    private void updateDNS() {
//        String currInternetIp = this.getCurrentHostIP();
//        log.debug("currInternetIp===>>> " + currInternetIp);
//        if (StringUtils.isEmpty(currInternetIp)) {
//            log.info("未获取到公网IP地址，本地定时任务跳过");
//            return;
//        }
//        String dnsRecords = (String) servletContext.getAttribute(attribute);
//        log.debug("dnsRecords===>>> " + dnsRecords);
//        if (StringUtils.isEmpty(dnsRecords)) {
//            JSONArray dnsRecordArr = new JSONArray();
//            JSONObject domain_home = this.getDNSRecord("home");
//            dnsRecordArr.add(domain_home);
//            dnsRecords = dnsRecordArr.toJSONString();
//            log.debug("dnsRecordArr===>>> " + dnsRecords);
//            servletContext.setAttribute(attribute, dnsRecords);
//        }
//        if (StringUtils.isNotEmpty(dnsRecords)) {
//            JSONArray dnsRecordArr = JSON.parseArray(dnsRecords);
//            boolean isReplace = false;
//            for (int d_i = 0, d_len = dnsRecordArr.size(); d_i < d_len; d_i++) {
//                JSONObject dnsRecord = dnsRecordArr.getJSONObject(d_i);
//                String recordIp = dnsRecord.getString("ip");
//                if (!recordIp.equals(currInternetIp)) {
//                    boolean update = this.updateDNSRecord(dnsRecord.getString("domain"), dnsRecord.getString("recordId"), currInternetIp);
//                    log.debug("update.domain===>>> " + dnsRecord.getString("domain"));
//                    log.debug("update.ip===>>> " + currInternetIp);
//                    log.debug("update.recordId===>>> " + dnsRecord.getString("recordId"));
//                    if (update) {
//                        log.debug("update.status===>>> " + update);
//                        isReplace = true;
//                    }
//                }
//            }
//            if (isReplace) {
//                servletContext.removeAttribute(attribute);
//            }
//        }
//    }
//
//    /**
//     * 更新DNS记录
//     * @Title: updateDNSRecord
//     * @param domain 二级域名标识
//     * @param recordId 记录ID
//     * @param currIp 当前IP地址
//     * @return boolean
//     * @throws
//     */
//    private boolean updateDNSRecord(String domain, String recordId, String currIp) {
//        boolean result = false;
//        try {
//            DefaultProfile profile = DefaultProfile.getProfile(
//                    regionId, // 地域ID
//                    accessKeyId, // 您的AccessKey ID
//                    secret);// 您的AccessKey Secret
//            IAcsClient client = new DefaultAcsClient(profile);
//            // 修改解析记录
//            UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest();
//            // 主机记录
//            updateDomainRecordRequest.setRR(domain);
//            // 记录ID
//            updateDomainRecordRequest.setRecordId(recordId);
//            // 将主机记录值改为当前主机IP
//            updateDomainRecordRequest.setValue(currIp);
//            // 解析记录类型
//            updateDomainRecordRequest.setType("A");
//            // TTL市场（默认不填为 600秒）
//            updateDomainRecordRequest.setTTL(600L);
//            UpdateDomainRecordResponse updateDomainRecordResponse = this.updateDomainRecord(updateDomainRecordRequest, client);
//            result = updateDomainRecordResponse.checkShowJsonItemName();
//        } catch (Exception e) {
//            log.error(ExceptionInfo.recordException(e));
//        }
//        return result;
//    }
//
//    /**
//     * 获取当前主机公网IP
//     * @Title: getCurrentHostIP
//     * @return String
//     * @throws
//     */
//    private String getCurrentHostIP() {
//        String currIp = "";
//        try {
//            // 这里使用jsonip.com第三方接口获取本地IP
//            String jsonip = "https://ipinfo.io/json?token=d1d1deca462c1b";
//            Map<String, String> headerMap = new HashMap<>();
//            headerMap.put("Host", "ipinfo.io");
//            // 接口返回结果
////            String result = SendRequest.sendRequestMsg(jsonip, null, "GET");
//            String result = HttpClient.doGet(jsonip, headerMap);
//            if (result.startsWith("{") && result.endsWith("}")) {
//                JSONObject jsonObj = JSON.parseObject(result);
//                currIp = jsonObj.getString("ip");
//            }
//        } catch (Exception e) {
//            log.error(ExceptionInfo.recordException(e));
//        }
//        return currIp;
//    }
//
//    /**
//     * 获取DNS解析记录
//     * @Title: getDNSRecord
//     * @param rRKeyWord 二级域名标识
//     * @return JSONObject
//     * @throws
//     */
//    private JSONObject getDNSRecord(String rRKeyWord) {
//        JSONObject result = new JSONObject();
//        try {
//            // 设置鉴权参数，初始化客户端
//            DefaultProfile profile = DefaultProfile.getProfile(
//                    regionId, // 地域ID
//                    accessKeyId, // 您的AccessKey ID
//                    secret);// 您的AccessKey Secret
//            IAcsClient client = new DefaultAcsClient(profile);
//            DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest();
//            // 主域名
//            describeDomainRecordsRequest.setDomainName("mymemory.com.cn");
//            // 主机记录
//            describeDomainRecordsRequest.setRRKeyWord(rRKeyWord);
//            // 解析记录类型
//            describeDomainRecordsRequest.setType("A");
//            DescribeDomainRecordsResponse describeDomainRecordsResponse = this.describeDomainRecords(describeDomainRecordsRequest, client);
//            List<DescribeDomainRecordsResponse.Record> domainRecords = describeDomainRecordsResponse.getDomainRecords();
//            // 最新的一条解析记录
//            if (domainRecords.size() != 0) {
//                DescribeDomainRecordsResponse.Record record = domainRecords.get(0);
//                // 记录ID
//                String recordId = record.getRecordId();
//                // 记录值
//                String recordValue = record.getValue();
//                result.put("recordId", recordId);
//                result.put("ip", recordValue);
//                result.put("domain", rRKeyWord);
//            }
//        } catch (Exception e) {
//            log.error(ExceptionInfo.recordException(e));
//        }
//        return result;
//    }
//
//    /**
//     * 获取主域名的所有解析记录列表
//     * @Title: describeDomainRecords
//     * @param request
//     * @param client
//     * @return DescribeDomainRecordsResponse
//     * @throws
//     */
//    private DescribeDomainRecordsResponse describeDomainRecords(DescribeDomainRecordsRequest request, IAcsClient client) {
//        DescribeDomainRecordsResponse response = null;
//        try {
//            // 调用SDK发送请求
//            response = client.getAcsResponse(request);
//        } catch (ClientException e) {
//            log.error(ExceptionInfo.recordException(e));
//        }
//        return response;
//    }
//
//    /**
//     * 修改解析记录
//     * @Title: updateDomainRecord
//     * @param request
//     * @param client
//     * @return UpdateDomainRecordResponse
//     * @throws
//     */
//    private UpdateDomainRecordResponse updateDomainRecord(UpdateDomainRecordRequest request, IAcsClient client) {
//        UpdateDomainRecordResponse response = null;
//        try {
//            // 调用SDK发送请求
//            response = client.getAcsResponse(request);
//        } catch (ClientException e) {
//            log.error(ExceptionInfo.recordException(e));
//        }
//        return response;
//    }
//
    
}
